const mongoose = require("mongoose")
const Schema = mongoose.Schema
let ObjectId = Schema.Types.ObjectId //他是芒果原生的表自动生成的

const bcrypt = require('bcrypt') //加密 和MD5差不多
const SALT_WORK_FACTOR = 10 //加盐


//创建UserSchema
const userSchema = new Schema({
  UserId: { type: ObjectId },
  userName: { unique: true, type: String },
  password: String,
  phonenumber: String,
  yzm: String,
  createAt: { type: Date, default: Date.now() },
  lastLoginAt: { type: Date, default: Date.now() },
}) //加盐

userSchema.pre('save', function (next) {
  // bcrypt 里面加密加盐的方法
  bcrypt.genSalt(SALT_WORK_FACTOR, (err, salt) => {
    if (err) return next(err)
    bcrypt.hash(this.password, salt, (err, hash) => {
      if (err) return next(err)
      this.password = hash
      next()
    })
  })
})

userSchema.methods = {
  comparePassword: (_password, password) => {
    return new Promise((resolve, reject) => {
      bcrypt.compare(_password, password, (err, isMatch) => {
        if (!err) resolve(isMatch)
        else reject(err)
      })
    })
  }
}

//发布模型
mongoose.model('User', userSchema)